/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author 0106119
 */
public class Musica implements Serializable {
    
    private int valor;
    private String titulo;
    private String arquivo;
    private ArrayList<Album> albuns ;
    private boolean preview;
    private ArrayList<Avaliacao> avaliacoes;

    /**
     * Construtor definitivo de músicas no sistema
     * @param valor preço em centavos da música no sistema
     * @param titulo titulo da música
     * @param arquivo link do arquivo da música
     * @param primeiroAlbum álbum de lançamento da música
     */
    public Musica(int valor, String titulo, String arquivo, Album primeiroAlbum) {
        this.valor = valor;
        this.titulo = titulo;
        this.arquivo = arquivo;
        this.albuns = new ArrayList<Album>();
        this.albuns.add(primeiroAlbum);
        primeiroAlbum.addMusica(this);
        this.avaliacoes = new ArrayList<Avaliacao>();
    }
    /**
     * 
     * @return valor em centavos da música
     */
    public int getValor() {
        return valor;
    }
    
    /**
     * 
     * @return valor da música formatado para impressão ao usuário
     */
    public String getValorFormatado(){
        return "R$ " + valor/100 + "," + String.format("%02d", valor%100);
    }
    /**
     * 
     * @return titulo da música
     */
    public String getTitulo() {
        return titulo;
    }
    
    /**
     * 
     * @return link do arquivo da música
     */
    public String getArquivo() {
        return arquivo;
    }
    
    /**
     * 
     * @return artista que criou a música
     */
    public Artista getArtista(){
        return albuns.get(0).getAutor();
    }
    
    /**
     * 
     * @return lista de álbum que apresentam esta música
     */
    public ArrayList<Album> getAlbuns(){
        return albuns;
    }
    
    /**
     * 
     * @param album novo álbum ao qual a música será vinculada
     */
    public void addAlbum(Album album){
        this.albuns.add(album);
    }
    
    @Override
    public String toString() {
        return "" + titulo +
                " - " + getArtista().getNomeArtistico()+ " -  R$ " + valor/100 + "," + String.format("%02d", valor%100) + "\n";
    }    
    
    @Override
    public boolean equals(Object obj){
        
        Musica outra = (Musica) obj;
        return (this.titulo.equals(outra.titulo) && this.albuns.get(0).getAutor().equals(outra.albuns.get(0).getAutor()));                 
    } 
    
    public String getAvaliacao (){
        Iterator it = this.avaliacoes.iterator();
        float nota = 0;
        
        while(it.hasNext()){            
            Avaliacao avaliacao = (Avaliacao) it.next();
            nota += (float)avaliacao.getValor();
        }        
        nota /= avaliacoes.size();
        return String.format("%.1f", nota);        
    }
    
    public void addAvaliacao(Avaliacao av){
        avaliacoes.add(av);
    }
    
}